using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._AviationTools._Airports._ObstructionIdentificationSurfaces
{
    /// <summary>
    /// <para>FAA 13A</para>
    /// <para>Creates obstruction identification surfaces (OIS) based on the FAA Advisory Circular 150/5300-13A specification. These approach and departure surfaces are designed to protect the use of the runway in both visual and instrument meteorological conditions near the airport and are used to support planning and design activities. The type, function, and dimension of a surface differ by its runway classification. This tool creates surfaces as a polygon or multipatch features.</para>
    /// <para>根据 FAA 咨询通告 150/5300-13A 规范创建障碍物识别表面 （OIS）。这些进近和离场表面旨在保护跑道在机场附近目视和仪表气象条件下的使用，并用于支持规划和设计活动。表面的类型、功能和尺寸因跑道分类而异。此工具可将曲面创建为面或多面体要素。</para>
    /// </summary>    
    [DisplayName("FAA 13A")]
    public class FAA13A : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public FAA13A()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_features">
        /// <para>Input Runway Features</para>
        /// <para>The input runway dataset. The feature class must be z-enabled and contain polylines.</para>
        /// <para>输入跑道数据集。要素类必须启用 z 并包含折线。</para>
        /// </param>
        /// <param name="_target">
        /// <para>Target OIS Features</para>
        /// <para>The target feature class that will contain the generated OIS.</para>
        /// <para>将包含生成的 OIS 的目标要素类。</para>
        /// </param>
        /// <param name="_runway_type">
        /// <para>Runway Classification</para>
        /// <para><xdoc>
        ///   <para>Specifies the classification of the runway.</para>
        ///   <bulletList>
        ///     <bullet_item>Small airplanes approach speeds less than 50 knots—Approach end of runways are expected to serve small airplanes with approach speeds less than 50 knots. This applies to visual runways only, day or night.</bullet_item><para/>
        ///     <bullet_item>Small airplanes approach speeds 50 knots or more—Approach end of runways are expected to serve small airplanes with approach speeds of 50 knots or more. This applies to visual runways only, day or night.</bullet_item><para/>
        ///     <bullet_item>Large airplanes for visual runways only, day or night—Approach end of runway are expected to serve large airplanes. This applies to visual runways only, day or night.</bullet_item><para/>
        ///     <bullet_item>Instrument approach visibility greater than or equal to 3/4 mile— Approach end of runways are expected to accommodate instrument approaches having visibility greater than or equal to 3/4 statute mile.</bullet_item><para/>
        ///     <bullet_item>Instrument approach less than 3/4 mile visibility—Approach end of runways are expected to accommodate instrument approaches having visibility minimums less than 3/4 statute mile.</bullet_item><para/>
        ///     <bullet_item>Vertical guidance approach—Approach end of runways are expected to accommodate instrument approaches with vertical guidance.</bullet_item><para/>
        ///     <bullet_item>Departure— Departure runway ends are used for any instrument operations.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定跑道的分类。</para>
        ///   <bulletList>
        ///     <bullet_item>小型飞机进近速度小于 50 节 - 跑道进近端预计将服务于进近速度小于 50 节的小型飞机。这仅适用于白天或黑夜的视觉跑道。</bullet_item><para/>
        ///     <bullet_item>小型飞机进近速度为 50 节或更高——跑道的进近端预计将为进近速度为 50 节或更高的小型飞机提供服务。这仅适用于白天或黑夜的视觉跑道。</bullet_item><para/>
        ///     <bullet_item>大型飞机仅用于目视跑道，白天或黑夜 - 跑道的进近端预计将为大型飞机提供服务。这仅适用于白天或黑夜的视觉跑道。</bullet_item><para/>
        ///     <bullet_item>仪表进近能见度大于或等于 3/4 英里— 跑道的进近端预计可容纳能见度大于或等于 3/4 法定英里的仪表进近。</bullet_item><para/>
        ///     <bullet_item>能见度小于 3/4 英里的仪表进近 - 跑道的进近端预计可容纳能见度最小小于 3/4 法定英里的仪表进近。</bullet_item><para/>
        ///     <bullet_item>垂直制导进近 - 跑道的进近端应适应具有垂直制导的仪表进近。</bullet_item><para/>
        ///     <bullet_item>出发— 出发跑道末端用于任何仪表操作。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        public FAA13A(object _in_features, object _target, _runway_type_value? _runway_type)
        {
            this._in_features = _in_features;
            this._target = _target;
            this._runway_type = _runway_type;
        }
        public override string ToolboxName => "Aviation Tools";

        public override string ToolName => "FAA 13A";

        public override string CallName => "aviation.FAA13A";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_in_features, _target, _runway_type.GetGPValue(), _highend_clear_way_length, _lowend_clear_way_length, _derived_outfeatureclass, _custom_json_file, _generate_clearway_surface.GetGPValue(), _airport_control_point_feature_class];

        /// <summary>
        /// <para>Input Runway Features</para>
        /// <para>The input runway dataset. The feature class must be z-enabled and contain polylines.</para>
        /// <para>输入跑道数据集。要素类必须启用 z 并包含折线。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Runway Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_features { get; set; }


        /// <summary>
        /// <para>Target OIS Features</para>
        /// <para>The target feature class that will contain the generated OIS.</para>
        /// <para>将包含生成的 OIS 的目标要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target OIS Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _target { get; set; }


        /// <summary>
        /// <para>Runway Classification</para>
        /// <para><xdoc>
        ///   <para>Specifies the classification of the runway.</para>
        ///   <bulletList>
        ///     <bullet_item>Small airplanes approach speeds less than 50 knots—Approach end of runways are expected to serve small airplanes with approach speeds less than 50 knots. This applies to visual runways only, day or night.</bullet_item><para/>
        ///     <bullet_item>Small airplanes approach speeds 50 knots or more—Approach end of runways are expected to serve small airplanes with approach speeds of 50 knots or more. This applies to visual runways only, day or night.</bullet_item><para/>
        ///     <bullet_item>Large airplanes for visual runways only, day or night—Approach end of runway are expected to serve large airplanes. This applies to visual runways only, day or night.</bullet_item><para/>
        ///     <bullet_item>Instrument approach visibility greater than or equal to 3/4 mile— Approach end of runways are expected to accommodate instrument approaches having visibility greater than or equal to 3/4 statute mile.</bullet_item><para/>
        ///     <bullet_item>Instrument approach less than 3/4 mile visibility—Approach end of runways are expected to accommodate instrument approaches having visibility minimums less than 3/4 statute mile.</bullet_item><para/>
        ///     <bullet_item>Vertical guidance approach—Approach end of runways are expected to accommodate instrument approaches with vertical guidance.</bullet_item><para/>
        ///     <bullet_item>Departure— Departure runway ends are used for any instrument operations.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定跑道的分类。</para>
        ///   <bulletList>
        ///     <bullet_item>小型飞机进近速度小于 50 节 - 跑道进近端预计将服务于进近速度小于 50 节的小型飞机。这仅适用于白天或黑夜的视觉跑道。</bullet_item><para/>
        ///     <bullet_item>小型飞机进近速度为 50 节或更高——跑道的进近端预计将为进近速度为 50 节或更高的小型飞机提供服务。这仅适用于白天或黑夜的视觉跑道。</bullet_item><para/>
        ///     <bullet_item>大型飞机仅用于目视跑道，白天或黑夜 - 跑道的进近端预计将为大型飞机提供服务。这仅适用于白天或黑夜的视觉跑道。</bullet_item><para/>
        ///     <bullet_item>仪表进近能见度大于或等于 3/4 英里— 跑道的进近端预计可容纳能见度大于或等于 3/4 法定英里的仪表进近。</bullet_item><para/>
        ///     <bullet_item>能见度小于 3/4 英里的仪表进近 - 跑道的进近端预计可容纳能见度最小小于 3/4 法定英里的仪表进近。</bullet_item><para/>
        ///     <bullet_item>垂直制导进近 - 跑道的进近端应适应具有垂直制导的仪表进近。</bullet_item><para/>
        ///     <bullet_item>出发— 出发跑道末端用于任何仪表操作。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Runway Classification")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _runway_type_value? _runway_type { get; set; }

        public enum _runway_type_value
        {
            /// <summary>
            /// <para>Small airplanes approach speeds less than 50 knots</para>
            /// <para>Small airplanes approach speeds less than 50 knots—Approach end of runways are expected to serve small airplanes with approach speeds less than 50 knots. This applies to visual runways only, day or night.</para>
            /// <para>小型飞机进近速度小于 50 节 - 跑道进近端预计将服务于进近速度小于 50 节的小型飞机。这仅适用于白天或黑夜的视觉跑道。</para>
            /// </summary>
            [Description("Small airplanes approach speeds less than 50 knots")]
            [GPEnumValue("SMALL_AIRPLANE_APPROACH_SPEEDS_LT_50")]
            _SMALL_AIRPLANE_APPROACH_SPEEDS_LT_50,

            /// <summary>
            /// <para>Small airplanes approach speeds 50 knots or more</para>
            /// <para>Small airplanes approach speeds 50 knots or more—Approach end of runways are expected to serve small airplanes with approach speeds of 50 knots or more. This applies to visual runways only, day or night.</para>
            /// <para>小型飞机进近速度为 50 节或更高——跑道的进近端预计将为进近速度为 50 节或更高的小型飞机提供服务。这仅适用于白天或黑夜的视觉跑道。</para>
            /// </summary>
            [Description("Small airplanes approach speeds 50 knots or more")]
            [GPEnumValue("SMALL_AIRPLANE_APPROACH_SPEEDS_GT_50")]
            _SMALL_AIRPLANE_APPROACH_SPEEDS_GT_50,

            /// <summary>
            /// <para>Large airplanes for visual runways only, day or night</para>
            /// <para>Large airplanes for visual runways only, day or night—Approach end of runway are expected to serve large airplanes. This applies to visual runways only, day or night.</para>
            /// <para>大型飞机仅用于目视跑道，白天或黑夜 - 跑道的进近端预计将为大型飞机提供服务。这仅适用于白天或黑夜的视觉跑道。</para>
            /// </summary>
            [Description("Large airplanes for visual runways only, day or night")]
            [GPEnumValue("LARGE_AIRPLANE_VISUAL_RUNWAY_DAY_NIGHT")]
            _LARGE_AIRPLANE_VISUAL_RUNWAY_DAY_NIGHT,

            /// <summary>
            /// <para>Instrument approach visibility greater than or equal to 3/4 mile</para>
            /// <para>Instrument approach visibility greater than or equal to 3/4 mile— Approach end of runways are expected to accommodate instrument approaches having visibility greater than or equal to 3/4 statute mile.</para>
            /// <para>仪表进近能见度大于或等于 3/4 英里— 跑道的进近端预计可容纳能见度大于或等于 3/4 法定英里的仪表进近。</para>
            /// </summary>
            [Description("Instrument approach visibility greater than or equal to 3/4 mile")]
            [GPEnumValue("INSTRUMENT_GT_EQ_3/4_MILE")]
            value3,

            /// <summary>
            /// <para>Instrument approach less than 3/4 mile visibility</para>
            /// <para>Instrument approach less than 3/4 mile visibility—Approach end of runways are expected to accommodate instrument approaches having visibility minimums less than 3/4 statute mile.</para>
            /// <para>能见度小于 3/4 英里的仪表进近 - 跑道的进近端预计可容纳能见度最小小于 3/4 法定英里的仪表进近。</para>
            /// </summary>
            [Description("Instrument approach less than 3/4 mile visibility")]
            [GPEnumValue("INSTRUMENT_LT_3/4_MILE_VISIBILITY")]
            value4,

            /// <summary>
            /// <para>Vertical guidance approach</para>
            /// <para>Vertical guidance approach—Approach end of runways are expected to accommodate instrument approaches with vertical guidance.</para>
            /// <para>垂直制导进近 - 跑道的进近端应适应具有垂直制导的仪表进近。</para>
            /// </summary>
            [Description("Vertical guidance approach")]
            [GPEnumValue("VERTICAL_GUIDANCE_APPROACH")]
            _VERTICAL_GUIDANCE_APPROACH,

            /// <summary>
            /// <para>Departure</para>
            /// <para>Departure— Departure runway ends are used for any instrument operations.</para>
            /// <para>出发— 出发跑道末端用于任何仪表操作。</para>
            /// </summary>
            [Description("Departure")]
            [GPEnumValue("DEPARTURE")]
            _DEPARTURE,

        }

        /// <summary>
        /// <para>Length of High Runway End Clearway</para>
        /// <para>This parameter is no longer supported. It is still included in the tool's syntax for compatibility in scripts and models but is hidden on the tool dialog box.</para>
        /// <para>不再支持此参数。它仍包含在工具的语法中，以便在脚本和模型中兼容，但在工具对话框中处于隐藏状态。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Length of High Runway End Clearway")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _highend_clear_way_length { get; set; } = 0;


        /// <summary>
        /// <para>Length of Low Runway End Clearway</para>
        /// <para>This parameter is no longer supported. It is still included in the tool's syntax for compatibility in scripts and models but is hidden on the tool dialog box.</para>
        /// <para>不再支持此参数。它仍包含在工具的语法中，以便在脚本和模型中兼容，但在工具对话框中处于隐藏状态。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Length of Low Runway End Clearway")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _lowend_clear_way_length { get; set; } = 0;


        /// <summary>
        /// <para>Output OIS Features</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output OIS Features")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _derived_outfeatureclass { get; set; }


        /// <summary>
        /// <para>Custom JSON File</para>
        /// <para>The import configuration, in JSON format, that creates the custom OIS.</para>
        /// <para>用于创建自定义 OIS 的 JSON 格式的导入配置。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Custom JSON File")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _custom_json_file { get; set; } = null;


        /// <summary>
        /// <para>Generate Clearway</para>
        /// <para><xdoc>
        ///   <para>Specifies whether a clearway surface will be generated for departure runways.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—A clearway surface will be generated.</bullet_item><para/>
        ///     <bullet_item>Unchecked—A clearway surface will not be generated. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否为出发跑道生成净空面。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 将生成通路曲面。</bullet_item><para/>
        ///     <bullet_item></bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Generate Clearway")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _generate_clearway_surface_value _generate_clearway_surface { get; set; } = _generate_clearway_surface_value._false;

        public enum _generate_clearway_surface_value
        {
            /// <summary>
            /// <para>GENERATE_CLEARWAY_SURFACE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("GENERATE_CLEARWAY_SURFACE")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NOT_GENERATE_CLEARWAY_SURFACE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NOT_GENERATE_CLEARWAY_SURFACE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Input Airport Control Point Feature</para>
        /// <para>Supplies x-, y-, and z-geometry for displaced threshold features. If displaced thresholds are included, surfaces will be constructed based on their x-, y-, and z-geometry instead of their corresponding runway feature endpoint.</para>
        /// <para>为位移阈值特征提供 x、y 和 z 几何。如果包含位移阈值，则将基于其 x、y 和 z 几何构建表面，而不是其相应的跑道要素端点。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Airport Control Point Feature")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _airport_control_point_feature_class { get; set; } = null;


        public FAA13A SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}